import { getToken } from '@/lib/ulit'
import store from '@/store'// 引入状态管理器
import router from '@/router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// 刷新的时候判断角色信息是否已经存在
// 在调用角色信息生成路由表，并动态添加
if (store.getters.name) {
  // 重新生成一次路由表
  store.dispatch('permission/createRoutes', store.getters.role)
  // 动态添加路由表
  router.addRoutes(store.getters.asyncRoutes)
}
// 动态添加 路由对象后 router.options.routes只能获取静态路由
// 无法拿到完整路由表
// 定义路由白名单(路由name)
const whiteRouteList = ['login', '404','test']
// 前置路由守卫
router.beforeEach(async (to, form, next) => {
  // 设置当前页面的标题栏
  document.querySelector('title').innerText = to.meta.title
  // 启动动画
  nprogress.start()
  // 获取token,不存在的情况
  if (!getToken()) {
    // 判断当前是否在白名单
    if (whiteRouteList.includes(to.name)) {
      return next()// 释放
    }
    // 不在白名单 跳login
    return next({ path: '/login', replace: true })
  }
  // token存在
  // 判断当前访问的是不是登录页
  if (to.path === '/login') {
    // 如果已经登录就不能再访问登录页，如果访问就去首页
    return next({ path: '/', replace: true })
  }
  // 判断角色信息是否存在
  // console.log(store.getters.name,'模块');
  if (store.getters.name) {
  // 用户信息存在 允许访问
    return next()
  }
  // 用户信息不存在，发送网络请求，拉取用户信息()
  const code = await store.dispatch('user/getUserInfo')
  // 根据用户角色生成路由表
  // console.log(store.getters.asyncRoutes,'afvs',store.getters.asyncURL);
  store.dispatch('permission/createRoutes', store.getters.role)
  // 动态添加路由
  router.addRoutes(store.getters.asyncRoutes)
  // hack等待路由表更新完成后 next
  // 动态路由配置完 会出现加载资源会造成再次点击才出现
  next({ ...to, replace: true })
})
// 后置路由钩子
router.afterEach((to, from) => {
  setTimeout(() => {
    nprogress.done()// 关闭切换动画
  }, 500)
})
